package cn.kivensoft.util;

import java.util.function.BiConsumer;

/** 通用缓存接口
 * @author kiven lee
 * @version 1.0
 * @since 2020-12-23
 */
public interface Cache<K, V> {
	
	/** 从缓存中获取键对应的值
	 * @param key 键名
	 * @return 对应的值，找不到返回null
	 */
	V get(K key);

	/** 将键对应的值放入缓存
	 * @param key 键名
	 * @param value 键值
	 */
	void put(K key, V value);

	/** 从缓存中移除键对应的值
	 * @param key 键名
	 */
	void remove(K key);

	/** 判断缓存中是否具备对应键名的值
	 * @param key 键名
	 * @return true: 存在, false: 不存在
	 */
	boolean containsKey(K key);

	/** 返回缓存当前大小
	 * @return 缓存数量大小
	 */
	int size();

	/** 返回缓存是否为空
	 */
	boolean isEmpty();

	/** 返回缓存容量大小
	 */
	int capacity();

	/** 删除所有缓存 */
	void clear();

	/** 缓存过期值清理函数 */
	void cycle();

	/** 返回缓存是否线程安全标志
	 */
	boolean isSynchronized();

	/** 循环回调函数，循环所有缓存的键值
	 * @param func 回调函数
	 */
	void forEach(BiConsumer<K, V> func);
}
